package com.yuw.hw20190220;

import java.util.*;

public class HomeWork {
    public static void main(String[] args) {
        test01();
    }

    /**
     * 使用List+Map存储二维表格数据，并进行显示打印
     */
    private static void test01() {
        // 创建一个Map对象，用于存储一行数据中的所有的列信息（列名-值构成了键值对）
        // 因为要求存入顺序和取出显示顺序一直，所有需要使用LinkedHashMap
        // 存储第一行数据的Map
        Map<String, Object> map1 = new LinkedHashMap<>(); // 每一行的map对象都要重新创建，否则后面的数据会覆盖之前的
        map1.put("num", 1);
        map1.put("name", "Zhangsan");
        map1.put("sex", "男");
        map1.put("age", 21);
        map1.put("score", 77);

        // 存储第二行数据的Map
        Map<String, Object> map2 = new LinkedHashMap<>();
        map2.put("num", 2);
        map2.put("name", "Lisi");
        map2.put("sex", "女");
        map2.put("age", 20);
        map2.put("score", 88);

        // 存储第三行数据的Map
        Map<String, Object> map3 = new LinkedHashMap<>();
        map3.put("num", 3);
        map3.put("name", "Wangwu");
        map3.put("sex", "男");
        map3.put("age", 19);
        map3.put("score", 66);

        // 创建一个用于存储Map集合的List
        // List集合中有几个map对象，就表示存储了几行数据
        List<Map<String, Object>> list = new ArrayList<>();
        // 将每行数据map存入list中
        list.add(map1);
        list.add(map2);
        list.add(map3);

        // 存储完成之后进行打印操作
        printMe(list);
    }

    /**
     * 打印存储二维表格的List+map数据结构中的数据
     *
     * @param lst
     */
    private static void printMe(List<Map<String, Object>> lst) {
        if (lst != null) {
            // 遍历list中的每个元素对象
            // 打印表头标志变量
            boolean isPinted = true;

            for (Map<String, Object> map : lst) {
                // 打印lst中的每个元素的信息（这个元素对象是Map）
                if (map != null) {
                    // 获取Map的keySet集合对象
                    Set<String> setKeys = map.keySet();
                    // 打印表头
                    // 只打印一次
                    if(isPinted){
                        for (String key:setKeys                         ) {
                            System.out.print("    " + key);
                        }
                        // 修改标志变量，只打印一次
                        isPinted = false;
                        // 换行
                        System.out.println();
                    }
                    // 转换为对keySet的遍历
                    // 获取keySet的迭代器对象
                    Iterator<String> it1 = setKeys.iterator();
                    while (it1.hasNext()) {
                        // 获取当前遍历的对象（key）
                        String key = it1.next();
                        // 通过key从map中取出与key对应的value值
                        System.out.print("    " + map.get(key));
                    }
                    // 换行
                    System.out.println();
                }
            }
        }
    }
}
